<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
    <script>

        var a=10; //全局变量 声明的时候可以不使用var
        function test1(){
            b=20; //不使用var声明的变量 就是全局变量
            var c=30; //用var声明，并且在函数的内部 这样的变量叫局部变量 有效范围只能在其声明的函数内部
            console.log(a); //10 
            console.log(b); //20
            console.log(c); //30
        }

        function test2(){
            console.log(a); //10
            console.log(b); //20
            //console.log(c); //c is not defined (c变量没有定义)
        }
        test1();
        test2();



        var count=0;
        function test3(){
            count++;
        }
        test3();
        test3();
        test3();
        console.log(count); //3 count不安全 因为谁都可以访问


        
        function test4(){
            var count=0; //局部变量
            return count++; //外部无法访问count，只能通过return才能将count变量返回，并输出
        }
        test4();
        test4();
        test4();
        console.log(test4()); // 每次调用方法 都将变量还原为0


        //闭包可以解决上面的问题
        function test5(){
            var count=0; //局部变量
            function jia(){
                return count++; 
            }
            return jia;
        }
        var fn=test5();
        fn();
        fn();
        console.log(fn()); // 2
    </script>
</body>
</html>